const ObjectId = require('mongoose').Types.ObjectId

class BaseMongo {
	constructor () {

	}

	/**
	 * 根据键值获取json数据
	 * @param obj 需要获取数据独享
	 * @param {[String]} keys 键值数组
	 */
	static getJson(obj, keys) {
		const json = {}
		keys.forEach((key) => {
			if (typeof key == 'string') {
				json[key] = obj[key]
			} else {
				json[key[1]] = obj[0]
			}
		})
		return json
	}

	/**
	 * 添加存在的对象
	 * @param {[String]} keys 键值数组
	 */
	static existparameter(keys) {
		const json = {}
		keys.forEach((key) => {
			json[key] = 1
		})
		return json
	}

	/**
	 * ID对象封装
	 * @param {String} id ID
	 * @returns {*}
	 */
	static objId (id) {
		return ObjectId(id)
	}

	/**
	 * 获取参数
	 * @param { String | Object } conditions 查询条件ID 或者自定义参数
	 * @returns {*}
	 */
	static getConditions(conditions = {}) {
		return conditions instanceof Object ? conditions : {'_id': this.objId(conditions)}
	}

	/**
	 * 获取单个数据详情
	 * @param { String | Object } conditions 查询条件ID 或者自定义参数
	 * @param  { Object } other 其他参数
	 * @returns {Promise<*>}
	 */
	static findOne(conditions, other) {
		return this.model.findOne(this.getConditions(conditions), other)
	}

	/**
	 * 修改数据
	 * @param data 接口传过来的数据
	 * @param keyData 更新的数据
	 * @returns {*}
	 */
	static updateOneWithId(id, data) {
		return this.model.updateOne({_id: this.objId(data.id)}, data)
	}
}

/**
 * 当前数据模型
 * @type {null}
 */
BaseMongo.model = null

module.exports = BaseMongo
